package com.ma.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
@Data //set get 方法
@Component
@ConfigurationProperties(prefix = "authority.jwt") //从配置文件中获取数据
public class JwtUtils {

	private long expire;
	private String secret;
	private String heard;

	//生成jwt
	public String 	generateToken(String username){
		Date nowDate=new Date();
		Date expireDate=new Date(nowDate.getTime() + 1000 * expire);
		//生成jwt的方法
		return 	Jwts.builder()
			.setHeaderParam("typ","JWT") //主体
			.setSubject(username) //所命令的主体
			.setIssuedAt(nowDate) //创建时间
			.setExpiration(expireDate) //过期时间
			.signWith(SignatureAlgorithm.HS512,secret) //算法  秘钥
			.compact(); //合成
	}

	//解析jwt
	public Claims getClaimsByToken(String jwt){
		//只要是捕获异常 返回空
		try{
			return Jwts.parser() //解析jwt
					.setSigningKey(secret) //解析秘钥
					.parseClaimsJws(jwt)  //解析jwt
					.getBody();  //获得jwt 3个 字符串}
		}
		catch(Exception e){
			return null;
		}
	}

	//jwt是否过期
	public boolean isTokenExpried(Claims claims) {
		//判断当前时间是否在过期时间之前
		return claims.getExpiration().before(new Date());
	}

}





